// Common stub types used across converted code.
// These lightweight structures unblock compilation when source dependencies
// are not part of the extracted IR.

#pragma once

#include <cstdint>
#include <memory>
#include <string>
#include <vector>

struct Person {
    std::string name;
    int32_t age{0};
};

struct Pet {
    std::string name;
    int32_t age{0};
    std::shared_ptr<Person> owner;
};

struct PetOwner {
    std::string name;
    std::vector<Pet> pets;
};

struct User {
    int32_t id{0};
    std::string username;
};

struct Clan {
    int32_t id{0};
    std::string name;
    std::string description;
};

struct Asset {
    int32_t id{0};
    std::string name;
    std::string asset_type;
};

struct SearchResult {
    int32_t id{0};
    std::string title;
    std::string snippet;
};

enum class ESearchCategory {
    Unknown = 0,
    Users = 1,
    Groups = 2,
    Assets = 3,
};

struct HttpResponse {
    int32_t status_code{200};
    std::string body;
};

enum class Feature {
    None = 0,
    Array = 1,
    Indexed = 2,
    Sorted = 4,
};

enum class EventType {
    None = 0,
    Added = 1,
    Removed = 2,
    Changed = 4,
    Cleared = 8,
};
